package buaa.qel.rpc.client.core;

import buaa.qel.rpc.client.proxy.RpcProxy;
import lombok.extern.slf4j.Slf4j;

/**
 * rpcClient使用zookeeper的地址来初始化，用来创建代理对象，创建代理对象的参数为接口class和实现类的名称
 * 实例化一个连接管理器对象，对一个客户端对所有服务端的连接进行管理
 */
@Slf4j
public class RpcClient {
    private ServiceDiscovery serviceDiscovery;

    public RpcClient(String address) {
        this.serviceDiscovery = new ServiceDiscovery(address);
    }

    /**
     * create rpc service
     * @param interfaceClass
     * @param serviceName
     * @param <T>
     * @return
     */
    public <T> T createService(Class<T> interfaceClass, String serviceName) {
        return new RpcProxy<T>(interfaceClass,serviceName).createProxy();
    }

    private void stop() {
        serviceDiscovery.stop();
        ConnectionManager.getInstance().stop();
    }

    public void destroy() throws Exception {
        this.stop();
    }
}

